package edu.uoc.vmerinom.tfc.report;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import net.sf.jooreports.templates.DocumentTemplateException;

import edu.uoc.vmerinom.tfc.support.Report;

/**
 * Superclase que contiene métodos y atributos comunes a todas las clases de
 * generación de informes.
 * 
 * @author Víctor Manuel Merino Martínez
 * 
 */
public class Reports {
	/**
	 * Campo fecha hora.
	 */
	static final String FECHA_HORA = "fechaHora";
	/**
	 * Extensión ODT.
	 */
	static final String ODT = "odt";
	/**
	 * Extensión PDF.
	 */
	static final String PDF = "pdf";
	/**
	 * Mime type PDF.
	 */
	static final String MIME_TYPE_PDF = "application/pdf";
	/**
	 * Campo título registro.
	 */
	static final String TITULO_REGISTRO = "tituloRegistro";

	/**
	 * Realiza las acciones necesarias para sustituir las variables del
	 * documento, convertir el documento a PDF, renombra el fichero resultante y
	 * escribirlo por la salida en la respuesta.
	 * 
	 * @param mapModel
	 *            Mapa modelo con las variables del documento
	 * @param fileNameStart
	 *            Comienzo del nombre del documento resultante
	 * @param template
	 *            Ruta y nombre de la plantilla
	 * @param date
	 *            Fecha
	 * @throws IOException
	 *             Excepciones de entrada/salida
	 * @throws DocumentTemplateException
	 *             Excepciones producidas en la sustitución de variables o la
	 *             conversión del documento
	 */
	public static void write(Map<String, Object> mapModel, String fileNameStart, String template, Date date) throws IOException, DocumentTemplateException {
		byte[] document = Report.getDocument(template, mapModel);
		byte[] content = Report.convert(document, ODT, PDF);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String fileName = fileNameStart + sdf.format(date) + ".pdf";
		Report.write(content, fileName, MIME_TYPE_PDF);
	}

}
